package com.yuw.io.homework0803;

public class TestDriver {

	public static void main(String[] args) {
		test01();
		test011();
		test012();
	}

	/**
	 * 
	 * 优化
	 */
	private static void test012() {
		// 外层for循环，遍历1-100之间的数
		for (int i = 2; i <= 100; i++) {
			// 假定 当前数 i 是一个素数
			boolean isPrime = true;
			// 循环否定，如果从2到i-1中有一个数可以整除i，则可以否定i不是素数；
			// 循环肯定，如果从2到i-1中所有的数都不能整除i，则可以肯定i是一个素数
			// 优化：检测到2到 平方根+1  即可
			for (int j = 2; j < (int)Math.sqrt(i) + 1; j++) {
				// 验证 j是否可以整除i
				if (i % j == 0) {
					// 否定i不是素数
					// 更改标志变量
					isPrime = false;
					// 否定一次即可，结束循环
					break;
				}
			}
			// 内层的整除循环验证之后，查看验证结果
			if (isPrime) {
				// 是素数，输出打印
				System.out.print(" " + i);
			}
		}
		// 换行
		System.out.println();
	}
	
	
	/**
	 * 
	 * 优化
	 */
	private static void test011() {
		// 外层for循环，遍历1-100之间的数
		for (int i = 2; i <= 100; i++) {
			// 假定 当前数 i 是一个素数
			boolean isPrime = true;
			// 循环否定，如果从2到i-1中有一个数可以整除i，则可以否定i不是素数；
			// 循环肯定，如果从2到i-1中所有的数都不能整除i，则可以肯定i是一个素数
			// 优化：检测到2到 i/2+1即可
			for (int j = 2; j < i / 2 + 1; j++) {
				// 验证 j是否可以整除i
				if (i % j == 0) {
					// 否定i不是素数
					// 更改标志变量
					isPrime = false;
					// 否定一次即可，结束循环
					break;
				}
			}

			// 内层的整除循环验证之后，查看验证结果
			if (isPrime) {
				// 是素数，输出打印
				System.out.print(" " + i);
			}
		}
		// 换行
		System.out.println();
	}

	/**
	 * 
	 * 作业： 求1-100之内的素数 分析： 素数：只能被1或自身整除的数；也叫质数；
	 */
	private static void test01() {
		// 外层for循环，遍历1-100之间的数
		for (int i = 2; i <= 100; i++) {
			// 假定 当前数 i 是一个素数
			boolean isPrime = true;
			// 循环否定，如果从2到i-1中有一个数可以整除i，则可以否定i不是素数；
			// 循环肯定，如果从2到i-1中所有的数都不能整除i，则可以肯定i是一个素数
			for (int j = 2; j < i - 1; j++) {
				// 验证 j是否可以整除i
				if (i % j == 0) {
					// 否定i不是素数
					// 更改标志变量
					isPrime = false;
					// 否定一次即可，结束循环
					break;
				}
			}

			// 内层的整除循环验证之后，查看验证结果
			if (isPrime) {
				// 是素数，输出打印
				System.out.print(" " + i);
			}
		}
		// 换行
		System.out.println();
	}
}
